package org.example.projecttwo.service;

import org.example.projecttwo.entity.LikeRecord;
import org.example.projecttwo.entity.dto.content.request.LikeDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;

/**
 * <p>
 * 点赞记录表 服务类
 * </p>
 *
 * @author nn
 * @since 2025-11-01
 */
public interface ILikeRecordService extends IService<LikeRecord> {

    /**
     * 查询用户点赞记录
     * @param userId 用户ID
     * @param contentType 内容类型（1-文章，2-新闻，null表示全部）
     * @return 点赞记录列表
     */
    List<LikeRecord> getUserLikes(Long userId, Integer contentType);

    /**
     * 查询内容的所有点赞记录
     * @param contentType 内容类型（1-文章，2-新闻）
     * @param contentId 内容ID
     * @return 点赞记录列表
     */
    List<LikeRecord> getContentLikes(Integer contentType, Long contentId);

    /**
     * 检查用户是否已点赞
     * @param userId 用户ID
     * @param contentType 内容类型
     * @param contentId 内容ID
     * @return 是否点赞
     */
    boolean checkLike(Long userId, Integer contentType, Long contentId);

    /**
     * 添加点赞记录并更新统计
     * @param userId 用户ID
     * @param contentType 内容类型
     * @param contentId 内容ID
     * @return 新增的点赞记录
     */
    LikeRecord addLike(Long userId, Integer contentType, Long contentId);

    /**
     * 取消点赞并更新统计
     * @param userId 用户ID
     * @param contentType 内容类型
     * @param contentId 内容ID
     */
    void cancelLike(Long userId, Integer contentType, Long contentId);

    /**
     * 批量取消点赞
     * @param userId 用户ID
     * @param likeList 点赞记录列表
     */
    void batchCancelLikes(Long userId, List<LikeDTO> likeList);

    /**
     * 统计内容的点赞数量
     * @param contentType 内容类型
     * @param contentId 内容ID
     * @return 点赞数量
     */
    int countByContent(Integer contentType, Long contentId);
}